在本教程中,您将创建小组件存储,为您提供一个视图,供您浏览和选择小组件,并选择要在另一个视图中查看其说明的小组件。您在上一步骤末尾运行工程时,仅看到应用程序背景。在本教程上一步中通过 Kanzi Studio 工程创建、并使用 API 加载的 kzb 文件包括使用该 API 创建应用程序逻辑所需的所有节点和资源:





要使用 Kanzi Engine API 访问 Kanzi Studio 工程的内容:
private:
//3D 网格列表框 (Grid List Box 3D) 节点,其中包含小组件。
GridListBox3DSharedPtr m_widgetList;
//当前在 Widget Grid List Box 节点中选择的小组件。
GridListBox3D::ItemSharedPtr m_selectedItem;
//场景摄像机。
CameraSharedPtr m_camera;
//摄像机动画变换目标。
SRTValue3D m_cameraTransformationTarget;
//动画化摄像机的动画剪辑。
SRTValue3DAnimationSharedPtr m_cameraAnimation;
//动画化摄像机的时间线回放。
TimelinePlaybackSharedPtr m_cameraPlayback;
//高亮显示该项的时间线回放。
TimelinePlaybackSharedPtr m_widgetHighlightPlayback;
//启用 Back button 的时间线回放。
TimelinePlaybackSharedPtr m_backButtonEnablePlayback;
//动画化选定小组件的动画剪辑项。
SRTValue3DAnimationSharedPtr m_selectedItemAnimation;
//含已选小组件和 Back button
//描述的描述面板。
NodeSharedPtr m_widgetDescriptionNode;
//动画化小组件描述可见性的动画剪辑。
BoolAnimationSharedPtr m_widgetDescriptionVisibilityAnimation;
//动画化小组件描述可见性动画的时间线回放。
TimelinePlaybackSharedPtr m_widgetDescriptionVisibilityPlayback;
//3D 文本块 (Text Block 3D) 节点,其中显示
//Widget Description Layer 节点中的小组件描述。
TextBlock3DSharedPtr m_widgetDescriptionTextBlock;
//小组件上的 Back button。
NodeSharedPtr m_backButton;
//禁用和启用 Back button 的动画剪辑。
BoolAnimationSharedPtr m_backButtonEnableAnimation;
//用于存储小组件名称的用户定义属性类型。
StringDynamicPropertyTypeSharedPtr m_widgetNamePropertyType;
//用于存储小组件描述的用户定义属性类型。
StringDynamicPropertyTypeSharedPtr m_widgetDescriptionPropertyType;ProgrammerTutorialApplication 类中的 onConfigure 函数后添加 onProjectLoaded() 函数。onProjectLoaded() 内,Kanzi 会在您加载应用程序后调用该函数。protected:
//在加载工程时初始化应用程序。
virtual void onProjectLoaded() KZ_OVERRIDE
{
}#) 后跟别名名称来检索别名目标节点,而不管节点在工程中的位置。请参阅 使用别名。virtual void onProjectLoaded() KZ_OVERRIDE
{
ScreenSharedPtr screen = getScreen();
//访问 Kanzi Studio 工程二进制文件的内容。
//获取存储所有小组件实例的 3D 网格列表框 (Grid List Box 3D) 组件引用。
//该路径由 Kanzi Studio 工程中可编辑的别名定义。
GridListBox3DSharedPtr widgetList = screen->lookupNode<GridListBox3D>("#Widget list");
//获取摄像机对象节点引用,将进行动画化。
CameraSharedPtr camera = screen->lookupNode<Camera>("#Camera");
//创建摄像机目标变换。
SRTValue3D cameraTransformationTarget = SRTValue3D(Vector3(1.0f, 1.0f, 1.0f), Vector3(kzsDegreesToRadians(60.0f), kzsDegreesToRadians(0.0f), 0.0f), Vector3(-1.5f, 7.0f, -5.0f));
//获取Widget Description Layer 节点的引用。
NodeSharedPtr widgetDescriptionNode = screen->lookupNode<Node>("#Widget description layer");
//获取对Widget Description Layer 中文本块的引用,其中显示小组件说明。
TextBlock3DSharedPtr widgetDescriptionTextBlock = screen->lookupNode<TextBlock3D>("#Widget description");
//获取Widget Description Layer 节点中的 Back button 引用。
NodeSharedPtr backButton = screen->lookupNode<Node>("#Back button");
//创建禁用和启用Back button 的动画剪辑。
BoolAnimationSharedPtr backButtonEnableAnimation = FromToAnimation<bool, StepEasingFunction>::create(getDomain(), chrono::seconds(1), false, true);
//创建隐藏Widget Description Layer 的动画剪辑。
BoolAnimationSharedPtr widgetDescriptionVisibilityAnimation = FromToAnimation<bool, StepEasingFunction>::create(getDomain(), chrono::seconds(1), true, false);
//为动画化选定列表框项而创建动画剪辑。
SRTValue3DAnimationSharedPtr selectedItemAnimation = FromToAnimation<SRTValue3D, LinearEasingFunction>::create(getDomain(), chrono::milliseconds(800),
SRTValue3D(Vector3(1.0f, 1.0f, 1.0f), Vector3(kzsDegreesToRadians(0.0f), 0.0f, 0.0f), Vector3(0.0f, 0.0f, 0.0f)),
SRTValue3D(Vector3(1.0f, 1.0f, 1.0f), Vector3(kzsDegreesToRadians(60.0f), 0.0f, 0.0f), Vector3(0.0f, 0.0f, 1.0f)));
}DynamicPropertyType 并使用 Kanzi Studio 工程中使用的相同名称。 属性和资源一样包含在共享指针中。class ProgrammerTutorialApplication: public ExampleApplication
{
...
//键入在 Kanzi Studio 工程中定义的自定义属性类型
//的共享指针。
typedef shared_ptr<DynamicPropertyType<string> > StringDynamicPropertyTypeSharedPtr;
protected:
virtual void onProjectLoaded() KZ_OVERRIDE
{
...
//获取自定义属性类型,以存储小组件名称。自定义
//属性类型在 Kanzi Studio 工程中创建。
StringDynamicPropertyTypeSharedPtr widgetNamePropertyType =
StringDynamicPropertyTypeSharedPtr(new DynamicPropertyType<string>("Programmertutorial.WidgetName"));
//获取自定义属性类型,以存储小组件描述。自定义
//属性类型在 Kanzi Studio 工程中创建。
StringDynamicPropertyTypeSharedPtr widgetDescriptionPropertyType =
StringDynamicPropertyTypeSharedPtr(new DynamicPropertyType<string>("Programmertutorial.WidgetDescription"));
}
...
};virtual void onProjectLoaded() KZ_OVERRIDE
{
...
//存储获得的资源和查找的节点。
using std::swap;
swap(m_widgetList, widgetList);
swap(m_camera, camera);
swap(m_cameraTransformationTarget, cameraTransformationTarget);
swap(m_selectedItemAnimation, selectedItemAnimation);
swap(m_widgetDescriptionNode, widgetDescriptionNode);
swap(m_widgetDescriptionVisibilityAnimation, widgetDescriptionVisibilityAnimation);
swap(m_widgetDescriptionTextBlock, widgetDescriptionTextBlock);
swap(m_backButton, backButton);
swap(m_backButtonEnableAnimation, backButtonEnableAnimation);
swap(m_widgetNamePropertyType, widgetNamePropertyType);
swap(m_widgetDescriptionPropertyType, widgetDescriptionPropertyType);
}